namespace patiya { namespace geom {

    class Point 
    {
    public:
        Point(int x = 0, int y = 0);
        Point(const Point&);
        bool operator==(const Point&) const;
        Point& operator=(const Point&);
        Point& operator+=(const Point&);
        int x() const;
        int y() const;
        int& rX();
        int& rY();
        void x(const int);
        void y(const int);
    private:
        int         m_x;
        int         m_y;
    };
    
    class Size 
    {
    public:
        Size(int width = 0, int height = 0);
        Size(const Size&);
        bool operator==(const Size&) const;
        Size& operator=(const Size&);
        int width() const;
        int height() const;
        int& rWidth();
        int& rHeight();
        void width(const int);
        void height(const int);
    private:
        int         m_width;
        int         m_height;
    };
    
    class Rect 
    {
    public:
        Rect(const Point& pos = Point(), const Size& size = Size());
        Rect(const Rect&);
        bool operator==(const Rect&) const;
        Rect& operator=(const Rect&);
        const Point& pos() const;
        const Size&  size() const;
        Point& rPos();
        Size& rSize();
        void pos(const Point&);
        void size(const Size&);
    private:
        Point    m_pos;
        Size     m_size;
    };

}}